上图: 本文代码的Github地址
思路:
- 每一个RecyclerView的item的布局(下文叫itemUI)里面都包含“吸顶文本”这个布局(下文叫StickyLayout),根据当前itemA和上一个itemB的吸顶信息是否相同,决定是否展示itemA的StickyLayout.
- 包含RecyclerView的布局(下文叫wrapperUI)最上部分,有一个假的StickyLayout(下文叫FakeStickyLayout).
- 监听RecyclerView的滚动,根据RecyclerView的滚动距离,决定FakeStickyLayout向上或者向下滚动的距离.
代码解析
- 先说布局:
1 | wrapperUI.xml |
1 | itemUI.xml |
这两个布局没什么特别,重点是1
<include layout="@layout/layout_sticky_header_view" />
这个include标签引用的布局,就是吸顶的那个布局,保证了itemUI中的StickyLayout和wrapperUI中的FakeStickyLayout的布局一致.
- 再说RecyclerView 的 Adapter:
1 | // RecyclerView 的第一个item,肯定是展示StickyLayout的. |
1 | if (position == 0) { |
- 说了半天,重点终于来了
1 | rvStickyExample.addOnScrollListener(new RecyclerView.OnScrollListener() { |
相关文章
写在末尾:
本人第一次写博客,如果有不正确的地方欢迎批评指正.